package com.yunxin.core.application.service;

import com.yunxin.common.result.PageResult;
import com.yunxin.core.application.command.merchant.MerchantPageCommand;
import com.yunxin.core.application.dto.merchant.*;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;

import java.util.List;
import java.util.Set;

/**
 * @author zero°
 * @since 2023-07-12
 */
public interface MerchantQueryAdminService {

    List<MerchantListDTO> selectList(String merchantName);

    /**
     * 根据商户id集合查询商户信息
     * @param merchantIds merchantIds
     * @return List<MerchantListDTO>
     */
    List<MerchantListDTO> listMerchantByIds(Set<Long> merchantIds);

    /**
     * 根据id获取商户详情
     * @param id id
     * @return MerchantDetailResponse
     */
    MerchantDetailDTO getMerchantDetail(Long id);

    /**
     * 根据商户类型获取商户下拉列表
     * @param merchantType 商户类型 1.个人 2.企业
     * @return List<MerchantListResponse>
     */
    List<MerchantListDTO> listMerchant(Integer merchantType);

    /**
     * 分页查询商户列表
     * @param command command
     * @return MerchantPageResponse
     */
    PageResult<MerchantPageDTO> merchantPageQuery(MerchantPageCommand command);

    /**
     * 根据系统账号id集合查询商户用户账号
     * @param sysUserIds sysUserIds
     * @return List<MerchantUserAccountDTO>
     */
    List<MerchantUserAccountDTO> listMerchantUserAccountBySysUserIds(@NotEmpty(message = "系统用户id集合不能为空") List<Long> sysUserIds);

    /**
     * 根据商户id查询可用商户用户账号(未禁用且接单开启)
     * @param merchantId merchantId
     * @return List<MerchantUserAccountInfoDTO>
     */
    List<MerchantUserAccountInfoDTO> listMerchantUserAccountByMerchantId(@NotNull(message = "商户id不能为空") Long merchantId);

    List<MerchantPageDTO> merchantPageQueryList(MerchantPageCommand command);
}
